草庐IT

c++ - QML Qt openUrlExternally

全部标签

python - 在 C 中访问另一个程序的变量

在python中,可以通过id函数了解变量的内存位置,所以:X="Helloworld!"print(id(X))#Outputisequalto139806692112112(0x7F27483876F0)我试图在C中使用指针访问变量(当然另一个程序仍然存在):#includeintmain(void){char*x=(char*)0x7F27483876F0;printf("%s\n",x);return0;}我编译了代码,没有错误或警告,但是当我尝试运行程序时,操作系统给出了段错误。我该如何解决这个问题?或者有可能吗? 最佳答案

c++ - 检测系统是否可以运行amd64可执行文件

我已将我的应用程序编译为使用x86指令集,但我需要以编程方式知道运行可执行文件的机器是否支持amd64指令集。有没有一种简单的方法可以找出这一点(可能使用CPUID)?应用程序需要能够在多个操作系统上运行,因此首选基于非操作系统的方法。 最佳答案 您正在寻找代码来检测Longmode.AbitintheCPUIDextendedattributesfieldinformsprogramsinrealorprotectedmodesiftheprocessorcangotolongmode,whichallowsaprogramtod

c++ - std::strftime 的返回值

我想我在某处读到,如果我将nullptr传递给std::strftime,该函数将返回所需的缓冲区大小。事实上,下面的代码在我试过的许多linux系统上运行得非常好(虽然不是用VS编译时):#include#include#includeintmain(){std::time_ttime{};std::tmconst*ltime=std::localtime(&time);constchar*formatString="%Y-%b-%d";//allocatebufferofappropriatesizeautorequiredSize=1+std::strftime(nullptr,

c++ - 使用 C 宏将字符串转换为非字符串

这个问题在这里已经有了答案:OppositeofCpreprocessor"stringification"(3个答案)关闭6年前。我知道可以使用这样的宏将某些内容转换为字符串:#defineSTRING(s)#sprintf("%s",STRING(iamstring));但是有可能做相反的事情吗?#defineMyType(type)???MyType("uint16_t")myint=100;

c++ - 光线追踪 : Only use single ray instead of both reflection & refraction rays

我目前正在尝试理解由KevinBeason(smallpt:http://www.kevinbeason.com/smallpt/)开发的光线追踪器,如果我正确理解代码,他会随机选择反射或折射光线(如果表面既反射又折射).第71-73行:returnobj.e+f.mult(depth>2?(erand48(Xi)谁能解释一下只转换一条射线而不是转换两条射线的缺点?我从未听说过这种技术,我很好奇它的权衡是什么,因为它会大大降低复杂性。 最佳答案 这是一个蒙特卡洛光线追踪器。它的优点是您不会产生呈指数增长的光线数量-这可能会出现在一些

c++ - 带中断的互斥安全(嵌入式固件)

编辑@Mike指出我下面代码中的try_lock函数是不安全的,并且访问器创建也会产生竞争条件。(来自每个人的)建议使我确信我走上了错误的道路。原始问题嵌入式微Controller上的锁定要求与多线程不同,我无法将多线程示例转换为我的嵌入式应用程序。通常我没有任何类型的操作系统或线程,只有main以及硬件定期调用的任何中断函数。我需要从中断中填充缓冲区是很常见的,但在main中处理它是很常见的。.我创建了IrqMutex下面的类来尝试安全地实现这一点。每个试图访问缓冲区的人都通过IrqMutexAccessor被分配了一个唯一的ID。,那么他们每个人都可以try_lock()和unlo

c++ - 根据公共(public)元素组合成对的整数

假设我有一对整数,例如(1,3)、(5,6)、(7,8)、(3,9),然后我想根据它们之间的共同元素将这些对组合成独特的集合即我可以组合(1,3)和(3,9)因为3在它们之间是通用的,所以上面输入的最终输出应该是这样的(1,3,9),(5,6),(7,8)一种方法可能是遍历此数组并基于公共(public)元素将其组合并从数组中删除第二对,我认为这很耗时。在C/C++中执行此操作的有效方法是什么? 最佳答案 执行此操作的一种有效方法是将其视为图形连接问题。创建一个图,其中节点是整数对,如果它们对应的对具有公共(public)元素,则在

c++ - 在 gdb 中使用核心转储时,我如何确切知道哪个线程导致了 SIGSEGV?

这个问题在这里已经有了答案:HowtofindwhichthreadcausedSEGFAULTinapost-mortemgdbsession?(1个回答)关闭7年前。我的应用程序使用了8个以上的线程。当我在gdb中运行infothreads时,我看到线程和它们正在执行的最后一个函数。对我来说,究竟是哪个线程导致了SIGSEGV似乎并不明显。有可能告诉它吗?是线程1吗?线程是如何编号的?

c++ - 屏蔽对于阻止旁路攻击是否有效?

我正在使用一些bigint公钥加密代码。使用按位掩码来确保计算时序和访问的内存地址与数据值无关是否安全?这项技术是否容易受到基于指令时序、功率、RF辐射或其他我不知道的因素的边信道攻击?(作为引用,我知道RSA盲法、EC蒙哥马利阶梯、缓存刷新等技术。)简单代码示例(C/C++):uinta=(...),b=(...);if(a现在翻译为使用恒定时间掩码:uinta=(...),b=(...);uintmask=-(uint)(a请注意a为0或1,掩码为0x00000000或0xFFFFFFFF。类似地,对于高级操作(C++):Integerx=(...);if(x.isFoo())x.

c++ - lambda 对象 + c 回调 sigsegv

如果我像这样实现C回调:register_callback([](/*someargs*/){/*somestuff*/});当它触发时我得到一个SIGSEGV,但是如果我这样注册它:autoconstf([](/*someargs*/){/*somestuff*/});register_callback(f);然后它工作正常。(对我而言)特别感兴趣的是地址sanitizer产生的堆栈跟踪:ASAN:SIGSEGV===================================================================22904==ERROR:Address